#include "Elemento.h"

namespace Modelo {

	Elemento::Elemento() {

		coordenadas.setX(0);
		coordenadas.setY(0);
		tipo = ELEMENTO;
		masa = 0;
		anguloRotacion = 0;
		movil = false;
		color.assign("ninguno");
		cambie = true;
	}

	Elemento::~Elemento() {}

	bool Elemento::actualizar(Elemento* elemento) {

		bool resultado = (elemento->tipo == tipo);

		if (resultado == true) {

			coordenadas.setX(elemento->coordenadas.getX());
			coordenadas.setY(elemento->coordenadas.getY());
			anguloRotacion = elemento->anguloRotacion;
			masa = elemento->masa;
			movil = elemento->movil;
			color = elemento->color;

			cambie = true;

		}

		return resultado;
	}

	Elemento*		Elemento::cargar(std::string informacion)	{ return this; }
	Elemento*		Elemento::operator<<(std::string info)		{ return cargar(info); }

	bool			Elemento::operator|| (Elemento* elemento)	{ return actualizar(elemento); }

	const Posicion* const Elemento::getPosicion()				{ return &coordenadas; }

	void			Elemento::setPosicion(Posicion* posicion)	{
		coordenadas.setX(posicion->getX());
		coordenadas.setY(posicion->getY());
	}

	double			Elemento::getAnguloRotacion()				{ return anguloRotacion; }
	void			Elemento::setAnguloRotacion(double a)		{ anguloRotacion = a; }

	double			Elemento::getMasa()							{ return masa; }
	void			Elemento::setMasa(double m)					{ masa = m; }

	bool			Elemento::esMovil()							{ return movil; }
	void			Elemento::setMovilidad(bool movilidad)		{ movil = movilidad; }

	string			Elemento::getColor()						{ return color; }
	void			Elemento::setColor(std::string c)			{ color.assign(c.c_str()); }

	TipoElemento	Elemento::getTipo()							{ return tipo; }
	void			Elemento::setTipo(TipoElemento tipo)		{ this->tipo = tipo; }

	bool			Elemento::fueModificado()					{ return cambie; }
	void			Elemento::reestablecerEstado()				{ cambie = false; }

}